package Buildings.net.client;
import java.net.*;
import java.io.*;
import Interfaces.*;
import Buildings.*;
import Buildings.dwelling.hotel.*;
import Buildings.dwelling.*;
import Buildings.office.*;
import Errors.*;

public class SerialClient {
    private static final int port=4500;
    public static void main(String []arg){//arg[0]=SerialBuildings arg[1]=CashSerial
        String q="SerialBuildings.txt";
        String w="CashSerial.txt";
        
        Socket my=null;
        ObjectOutputStream out=null;//отправляем объекты
        ObjectInputStream in=null; //принимаем обьекты
        
        System.out.println("Клиентское приложение - сериализация");
        try{
            my=new Socket("127.0.0.1",port);
            out=new ObjectOutputStream(my.getOutputStream());
            in=new ObjectInputStream(new BufferedInputStream(my.getInputStream()));
        }catch(UnknownHostException e){
            System.out.println("Ошибка соединения!");
            System.exit(1);
        }catch (IOException ex){
           System.out.println("Ошибка в вводе выводе!");
        }
        System.out.println("Подключено!");
        try{
        ObjectInputStream readBuild=new ObjectInputStream(new FileInputStream(q));
        PrintWriter writeCash=new PrintWriter(new FileWriter(w));
        
        
        Building b;
        Object readed;
        BuildingUnderArrestException errorExample=new BuildingUnderArrestException();
        Double cash=new Double(0);
        while(true){
            try{
                b=(Building)readBuild.readObject();
                out.writeObject(b);
                out.flush();
                System.out.println("Считано здание и отдано в сокет:");
                System.out.print(b);
                readed=in.readObject();
                if(readed.getClass()==cash.getClass()){//считано число
                    writeCash.println(((Double)readed).doubleValue());
                    System.out.println("Прочитано из сокета "+((Double)readed).doubleValue());
                }else if(readed.getClass()==errorExample.getClass()){
                    System.out.println("Прочитано из сокета: Здание арестовано");
                    writeCash.println("Arest");
                }else System.out.println("Считан неизвестный обьект");
            }catch(IOException ev){//заходим сюда когда ошибка в чтении здания из файла
                writeCash.close();
                out.writeObject(new Integer(-1));//метка для сервера о конеце передачи
                break;
            }
        }
        }catch(IOException e){
            System.out.println("Ошибка открытия файлов ");
        }catch (ClassNotFoundException ex) {
            System.out.println("Неизвестный класс ");
        }
        
        try{ 
            in.close();
            out.close();
            my.close();
        }catch (IOException nx){
           System.out.println("Ошибка закрытия сокетов и потоков данных");
        } 
    }
}
